/* KLASSLISTA UPPGIFT PROG-B OKTOBER 2006
Filen elever.txt måste finnas i aktuell katalog
-= Funktionernas namn kan vara lite förvirrande
då programmet är en lista över personer och deras
telefonnummer =-
Funktioner:
drawmenu Ritar upp användargränssnitt
drawList Skriver ut hela listans innehåll
addCd Lägger till ett objekt i listan
searchCD Söker och returnerar ett objekt i listan
bubbelSort Sorterar listan i bokstavsordning
*/
#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <conio.h> //för getch(); och sleep()
using namespace std;
int counter=0; //global variabel används av flera funktioner
struct elev{
string namn;
string resultat; //eg.telefonnummer
};
void drawmenu();
void drawList( elev array[]);
void addCd (elev array[]);
void bubbelSort(elev array[], int antal);
void searchCd (elev array[], int antal);
/* START */
int main()
{
elev klasslista [50];
// INITIERING elever.txt läses till klasslista[]
string temp; //används av första inläsningem
ifstream inFil; //objektet infil=>som cin men källa kan styras
inFil.open("elever.txt"); //Styr vilken fil (källa) som skall läsas in
if(inFil.fail()) //Felhantering – om filen ej kan öppnas
{
cerr<<"Filen kunde ej \x94ppnas - bailing out!";
getch();
exit(1);
}
//FÖRSTA INLÄSNINGEN SKER UTANFÖR LOOPEN - OM DEN ÄR OK STARTAR LOOPEN
getline(inFil,temp); //läser till temporär string
if(inFil.eof()) //om tom fil läses EndOfFile in i.s.f avbryt
cout<<"FILEN \x8eR TOM!"<<endl;
else
{
for(int i=0; !inFil.eof()&&!inFil.fail() ;i++) //så länge inte eof() eller fail()
{
klasslista[i].namn=temp;
getline(inFil,klasslista[i].resultat);
//inFil.ignore(1000,'\n'); //läser bort EOL
counter++;
getline(inFil,temp);
}
}
inFil.close();
// INLÄSNING TILL ARRAY KLAR /*/*/
//Switch case sats *****switchar beroende på värde för val ************************
int val=0;
while(val != 5)
{
system("CLS");
drawmenu(); //RITAR MENU
cin>>val;
cin.ignore(1000,'\n');
switch (val)
{
case 1:
drawList( klasslista);
getch();
break;
case 2:
bubbelSort(klasslista, counter);
break;
case 3:
addCd (klasslista);
break;
case 4:
searchCd (klasslista,counter);
break;
case 5:
cout<<"AVSLUTAR"<<endl;
getch();
break;
default:
cout<<"Felaktig inmatning! Tryck Enter!"<<endl;
getch();
}
}
//END * * ANVÄNDARGRÄNSSNITT OCH VALALTERNATIV
//PROGRAMAVSLUTNING = case 5: Skriver klasslista till filen elever.txt
ofstream tillFil;
tillFil.open("elever.txt");
cout<<"Telefonlistan uppdateras"<<endl;
sleep(200); //just for fun!
cout<<"klart"<<endl;
for(int i=0; i<counter; i++) // skriver uppdaterad lista till fil
{
tillFil<<klasslista[i].namn<<endl;
tillFil<<klasslista[i].resultat<<endl;
}
tillFil.close();
getch();
return 0;
} //END of PROGRAM.
/*
FUNKTIONSDEFINITIONER
*/
// FUNKTION DRAW MENU ---------------------------------------------------------------
void drawmenu()
{
cout<<endl;
cout<<endl;
cout<<" ************* = = TELEFONLISTA = =***********"<<endl<<endl;
cout<<" Vill du:"<<endl;
cout<<" Se hela listan? Ange 1"<<endl;
cout<<" Sortera efter namn? Ange 2"<<endl;
cout<<" Lägga till post? Ange 3"<<endl;
cout<<" S\x94ka namn ? Ange 4"<<endl;
cout<<" Avsluta ? Ange 5"<<endl;
cout<<endl<<endl<<" ******************************************"<<endl;
}
// FUNKTION drawList ----- Skriv ut arrayinnehåll till monitor -----------------------
void drawList( elev array[])
{system("cls");
cout<<endl;
for(int i=0; i<counter; i++)
{
cout<<array[i].namn<<endl;
cout<<array[i].resultat<<endl;
cout<<endl;
}
}
//Funktion AddCd---------------------------------------------------------------------
void addCd (elev array[])
{
cout<<endl<<"L\x84gg till ytterligare poster i telefonlistan avsluta med # f\x94r namn"<<endl;
cout<<"Tryck f\x94rst enter";
getch(); //väntar på knapptryckning
system("CLS"); //rensar skärmen
string tempnamn;
cout<<"ange namn (# f\x94r att avsluta): ";
getline(cin,tempnamn);
for(int i=counter; tempnamn!="#"; i++)
{
array[i].namn=tempnamn;
cout<<"ange telenummer: ";
getline(cin,array[i].resultat);
// cin.ignore(1000,'\n');
system("CLS");
cout<<"ange namn(# f\x94r att avsluta): ";
getline(cin,tempnamn);
counter++;
}
}
//Funktion bubbleSort ---------------------------------------------------------------
void bubbelSort(elev array[], int antal)
{
for(int m=antal-1; m>0; m--)
{
for(int n=0; n<m;n++)
{
if(array[n].namn > array[n+1].namn)
{
elev temp=array[n];
array[n]=array[n+1];
array[n+1]= temp;
}
}
}
for(int i=0; i<6; i++)
{
cout<<(char)219;
sleep(200);
}
cout<<endl;
sleep(300);
cout<<"klart"<<endl;
getch();
}
//FUNKTION SÖK_CD ---------------------------------------------------------------
void searchCd (elev array[], int antal)
{string objekt;
bool hit=0;
cout<<"Ange s\x94kstr\x84";
getline(cin,objekt);
for(int i=0; i<antal; i++)
{
if(array[i].namn==objekt)
{
cout<<"Objektet hittades på plats "<<i+1;
cout<<endl<<array[i].namn;
cout<<endl<<array[i].resultat;
hit=1;
}
}
if (hit==0)
cout<<"Objektet finns ej i listan";
getch();
}
// THE END